home *** CD-ROM | disk | FTP | other *** search
/ Font Pro 2: Types of Distinction / Font Pro Volume 2 - Types of Distinction - Wayzata Technology (1992).iso / mac / fogs / source Code / Menu MAD / MenuMadness.bas next >
Encoding:
BASIC Source File  |  1994-04-19  |  6.2 KB  |  223 lines  |  [TEXT/ZBAS]

  1. RESOURCES "MenuMadness.rsc","APPLMMDs"
  2. COMPILE 0,_macsBugLabels                          ' copyright 1994 Robert Schenk         
  3.  
  4. _ApfelMenu=127
  5. _fileMenu=1
  6. _Basics=2
  7. _Dim=1
  8. _CheckNext=2
  9. _Dummy=4
  10. _Uncheck=3
  11. _DimThird=5
  12. _Flash=7
  13. DIM ghelpmenuitem, gmenu%
  14. END GLOBALS
  15. '*******************************************
  16. 'FN to put help menu where it belongs
  17. '*******************************************
  18. LOCAL FN InstallHelp(Title$)
  19.   LONG IF SYSTEM(_sysVers)>690
  20.     err=FN HMGETHELPMENUHANDLE(HHndl&)
  21.     LONG IF err=0 AND HHndl&<>0
  22.       CALL APPENDMENU(HHndl&, Title$)
  23.       ghelpmenuitem=FN COUNTMITEMS(HHndl&)
  24.       EXIT FN                                     ' needs FB version 1.02
  25.     END IF
  26.   END IF
  27.   Hndl&=FN GETMHANDLE(127)
  28.   CALL INSMENUITEM(Hndl&,"Help...",1)
  29. END FN
  30. '****************************************
  31. 'fn checks one and only one item in a menu
  32. '****************************************
  33. LOCAL FN SetOneCheck(menuid%, menuitem%)
  34.   Hndl&= FN GETMHANDLE(menuid%)
  35.   LONG IF Hndl&<>0
  36.     i=FN COUNTMITEMS(Hndl&)
  37.     LONG IF i>0
  38.       FOR j=1 TO i
  39.         CALL CHECKITEM(Hndl&, j, menuitem%=j)
  40.       NEXT j
  41.     END IF
  42.   END IF
  43. END FN
  44. '*****************************************
  45. 'fn illustrates how one can switch menubars
  46. '*****************************************
  47. LOCAL FN SwitchMenuBar(id%)
  48.   Hndl&=FN GETMENUBAR
  49.   LONG IF Hndl&<>0 
  50.     CALL CLEARMENUBAR
  51.     CALL RELEASERESOURCE(Hndl&)
  52.   END IF
  53.   Hndl&=FN GETNEWMBAR(id%)
  54.   LONG IF Hndl&<>0
  55.     CALL SETMENUBAR(Hndl&)
  56.     CALL DRAWMENUBAR
  57.   END IF
  58.   FN InstallHelp("Menu Madness Help...)
  59.   gmenu=id%
  60. END FN
  61. '*******************************************
  62. ' function to install a submenu
  63. '*******************************************
  64. LOCAL FN installSubMenu(id%)
  65.   Hndl&=FN GETMENU(id%)
  66.   CALL INSERTMENU(Hndl&, -1)
  67. END FN
  68. '*******************************************
  69. 'FN illustrates Toolbox routines
  70. '*******************************************
  71. LOCAL FN ShowSetItemRoutines
  72.   ' first we mark up things in the third menu
  73.   Hndl&=FN GETMHANDLE(3)
  74.   CALL SETITEMICON(Hndl&,1, 5)                    ' reverse is CALL GETITEMICON(HNDL&,item%, code)
  75.   CALL SETITEMCMD(Hndl&,2,29)                     ' Reverse is CALL GETITEMCMD(Hndl&, item%, code)
  76.   CALL SETITEMICON(Hndl&,2, 5)                    ' consider also CALL GETITEMMARK(Hndl&, item%, code)
  77.   CALL SETITEMMARK(Hndl&,3,_CheckMark)            ' _CHECKMARK=18
  78.   CALL SETITEMMARK(Hndl&,4,_DIAMONDMARK)          ' _DIAMONDMARK=19
  79.   CALL SETITEMSTYLE(Hndl&, 6,2)                   ' reverse is CALL GETITEMSTYLE(Hndl&, item%, code)
  80.   CALL SETITEMSTYLE(Hndl&, 7,1)
  81.   CALL SETITEMSTYLE(Hndl&, 8,8)
  82.   CALL SETITEMSTYLE(Hndl&, 9,4)
  83. END FN
  84. '*******************************************
  85. 'fn illustrates how to build a menu of resoources
  86. '*******************************************
  87. LOCAL FN BuildNoiseMenu
  88.   Hndl&=FN NEWMENU(4, "Noise")
  89.   LONG IF Hndl&<>0
  90.     CALL INSERTMENU(Hndl&,0)
  91.     CALL DRAWMENUBAR
  92.     CALL INSERTRESMENU(Hndl&, _"snd ",0)
  93.     'CALL ADDRESMENU(Hndl&, _"snd ")' another way to do this
  94.     CALL GETITEM(Hndl&,1,a$)
  95.     i=FN COUNTMITEMS(Hndl&)
  96.     PRINT a$, i
  97.     WHILE a$<"A" AND i>0
  98.       CALL DELMENUITEM(Hndl&,1)
  99.       CALL GETITEM(Hndl&,1,a$)
  100.       i=FN COUNTMITEMS(Hndl&)
  101.     WEND
  102.   END IF
  103. END FN
  104. '********************************************
  105. 'fn illustrates how to flash menus and menubar
  106. '********************************************
  107. LOCAL FN flashit
  108.   DELAY 200
  109.   FOR j=1 TO 4
  110.     FOR i= 1 TO 4
  111.       CALL FLASHMENUBAR(i)
  112.       'CALL HILITEMENU(i)   another way to get same result
  113.       DELAY 100
  114.     NEXT i
  115.   NEXT j
  116.   CALL HILITEMENU(0)
  117.   FOR j=1 TO 10
  118.     CALL FLASHMENUBAR(0)
  119.     DELAY 200
  120.   NEXT j
  121. END FN
  122. '**********************************************
  123. LOCAL FN intialize
  124.   FN SwitchMenuBar(128)
  125.   FN ShowSetItemRoutines
  126.   FN installSubMenu(40)
  127.   FN BuildNoiseMenu
  128. END FN
  129. '**********************************************
  130. LOCAL FN doquit
  131.   END
  132. END FN
  133. '**********************************************
  134. LOCAL FN domenu
  135.   DIM menuid, menuitem
  136.   menuid=MENU(0)
  137.   menuitem=MENU(1)
  138.   SELECT CASE menuid
  139.     CASE _ApfelMenu
  140.       SELECT CASE menuitem
  141.         CASE 1
  142.           PRINT "Apple Menu pulled down."
  143.         CASE 2
  144.           PRINT "Help under Apple Menu"
  145.       END SELECT
  146.     CASE _fileMenu
  147.       FN doquit
  148.     CASE _Basics
  149.       SELECT CASE menuitem
  150.         CASE _Dim
  151.           Hndl&=FN GETMHANDLE(_Basics)
  152.           CALL GETITEM(Hndl&, _Dim, A$)
  153.           LONG IF A$="Enable Dummy"
  154.             CALL SETITEM(Hndl&,_Dim,"Disable Dummy")
  155.             CALL ENABLEITEM(Hndl&,_Dummy)
  156.           XELSE
  157.             CALL SETITEM(Hndl&,_Dim,"Enable Dummy")
  158.             CALL DISABLEITEM(Hndl&,_Dummy)
  159.           END IF 
  160.         CASE _CheckNext
  161.           Hndl&=FN GETMHANDLE(_Basics)
  162.           CALL CHECKITEM(Hndl&,_Dim,_true)
  163.         CASE _Dummy
  164.           BEEP
  165.         CASE _Uncheck
  166.           Hndl&=FN GETMHANDLE(_Basics)
  167.           CALL CHECKITEM(Hndl&,_Dim,_false)
  168.         CASE _DimThird
  169.           Hndl&=FN GETMHANDLE(_Basics)
  170.           CALL GETITEM(Hndl&, _DimThird, A$)
  171.           LONG IF A$="Enable Third Menu"
  172.             CALL SETITEM(Hndl&,_DimThird,"Disable Third Menu")
  173.             Hndl&=FN GETMHANDLE(3)
  174.             CALL ENABLEITEM(Hndl&,0)
  175.           XELSE
  176.             CALL SETITEM(Hndl&,_DimThird,"Enable Third Menu")
  177.             Hndl&=FN GETMHANDLE(3)
  178.             CALL DISABLEITEM(Hndl&,0)
  179.           END IF
  180.           CALL DRAWMENUBAR
  181.         CASE _Flash
  182.           FN flashit
  183.         CASE ELSE
  184.       END SELECT
  185.     CASE 3                                        ' This menu does nothing at all
  186.     CASE 4
  187.       Hndl&=FN GETMHANDLE(4)
  188.       CALL GETITEM(Hndl&, menuitem, a$)
  189.       FN SetOneCheck(menuid, menuitem)
  190.       SOUND a$
  191.       PRINT menuitem, a$
  192.     CASE 40
  193.       PRINT menuid, menuitem
  194.       LONG IF menuitem=4
  195.         LONG IF gmenu=128
  196.           FN SwitchMenuBar(129)
  197.         XELSE
  198.           FN SwitchMenuBar(128)
  199.           FN installSubMenu(40)
  200.         END IF
  201.       END IF
  202.     CASE 99
  203.     CASE _kHMHelpMenuID
  204.       SELECT CASE menuitem
  205.         CASE  ghelpmenuitem 
  206.           PRINT "No help available."
  207.       END SELECT
  208.     CASE ELSE
  209.   END SELECT
  210.   CALL HILITEMENU(0)
  211. END FN
  212. '**********************************************
  213. 'main program
  214. '**********************************************
  215. FN intialize
  216. ON MENU FN domenu
  217. ON BREAK FN doquit
  218. DO
  219.   HANDLEEVENTS
  220. UNTIL programends
  221.  
  222.  
  223.